home *** CD-ROM | disk | FTP | other *** search
/ EuroCD 3 / EuroCD 3.iso / Communication / Citadel_BBS / Docs / NETHACK3.man < prev    next >
Text File  |  1998-06-24  |  83KB  |  1,943 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.                                 NETHACK3 MANUAL
  17.  
  18.                                Citadel-86: V3.41
  19.  
  20.                              Copyright 1989 - 1991
  21.  
  22.                                   by Hue, Jr.
  23.  
  24.                              C-86 Test System Sysop
  25.  
  26.                                     91Dec08
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71.                          Table of Contents
  72.  
  73.      I. Introduction . . . . . . . . . . . . . . . . . . . . . . .  2
  74.         I.1 History  . . . . . . . . . . . . . . . . . . . . . . .  2
  75.         I.2 Purpose  . . . . . . . . . . . . . . . . . . . . . . .  2
  76.      II. Overview  . . . . . . . . . . . . . . . . . . . . . . . .  3
  77.      III. Information Transfer Layer . . . . . . . . . . . . . . .  3
  78.         III.1 Call Stabilization . . . . . . . . . . . . . . . . .  4
  79.         III.2 Transfer Medium  . . . . . . . . . . . . . . . . . .  5
  80.      IV. Application Layer . . . . . . . . . . . . . . . . . . . .  6
  81.         IV.1 Overview  . . . . . . . . . . . . . . . . . . . . . .  7
  82.         IV.2 ID & Name . . . . . . . . . . . . . . . . . . . . . .  7
  83.         IV.3 Facility Requests . . . . . . . . . . . . . . . . . .  8
  84.         IV.4 Message & File Transfer . . . . . . . . . . . . . . .  9
  85.         IV.5 Network Session Control Facilities  . . . . . . . . .  9
  86.            IV.5.a Hangup command . . . . . . . . . . . . . . . . .  9
  87.            IV.5.b Error Code Support . . . . . . . . . . . . . . . 10
  88.            IV.5.c Role Reversal  . . . . . . . . . . . . . . . . . 10
  89.            IV.6 Data Transfer Facilities . . . . . . . . . . . . . 10
  90.            IV.6.a Normal Mail  . . . . . . . . . . . . . . . . . . 10
  91.            IV.6.b Room File Requests . . . . . . . . . . . . . . . 10
  92.            IV.6.c Ambiguous Room File Requests . . . . . . . . . . 11
  93.            IV.6.d Ambiguous Room File Requests With Approval . . . 11
  94.            IV.6.e Network Room . . . . . . . . . . . . . . . . . . 12
  95.            IV.6.f Check Mail . . . . . . . . . . . . . . . . . . . 12
  96.            IV.6.g Send File  . . . . . . . . . . . . . . . . . . . 13
  97.            IV.6.h Alternate Room Sharing . . . . . . . . . . . . . 13
  98.            IV.6.i Message Compaction . . . . . . . . . . . . . . . 13
  99.            IV.6.j Route Mail . . . . . . . . . . . . . . . . . . . 14
  100.            IV.6.k Mass Transfers
  101.         IV.7 ITL Alternate Realities . . . . . . . . . . . . . . . 14
  102.         IV.8 Security  . . . . . . . . . . . . . . . . . . . . . . 15
  103.            IV.8.a System Net Password  . . . . . . . . . . . . . . 15
  104.         IV.9 Other Reserved Facility Byte Values . . . . . . . . . 15
  105.         IV.10 Facilities -- Short List . . . . . . . . . . . . . . 16
  106.      V. Minimal Compatability Requirements . . . . . . . . . . . . 16
  107.      VI. Anytime Netting . . . . . . . . . . . . . . . . . . . . . 16
  108.      VII. Message Transfer Format  . . . . . . . . . . . . . . . . 17
  109.           VII.1 Field types  . . . . . . . . . . . . . . . . . . . 17
  110.             VII.1.a Displayable fields . . . . . . . . . . . . . . 18
  111.             VII.1.b Non-Displayable fields . . . . . . . . . . . . 19
  112.             VII.1.c Special Fields . . . . . . . . . . . . . . . . 19
  113.             VII.1.d Developer's Fields Assignments . . . . . . . . 20
  114.           VII.2 Special Fields becoming Standard Fields  . . . . . 20
  115.           VII.3 Other Additions to the Standard Fields . . . . . . 21
  116.           VII.4 Identifier Summary . . . . . . . . . . . . . . . . 21
  117.           VII.5 An Example . . . . . . . . . . . . . . . . . . . . 22
  118.      Appendix A.  Examples!  . . . . . . . . . . . . . . . . . . . 22
  119.        A.1 Call Stabilization  . . . . . . . . . . . . . . . . . . 22
  120.        A.2 ID & Name . . . . . . . . . . . . . . . . . . . . . . . 23
  121.        A.3 Normal Mail . . . . . . . . . . . . . . . . . . . . . . 23
  122.        A.4 Ambiguous Room File Requests  . . . . . . . . . . . . . 24
  123.        A.5 Network Room  . . . . . . . . . . . . . . . . . . . . . 24
  124.        A.6 Check Mail  . . . . . . . . . . . . . . . . . . . . . . 25
  125.        A.7 Send File . . . . . . . . . . . . . . . . . . . . . . . 25
  126.        A.8 Alternate Room Sharing  . . . . . . . . . . . . . . . . 25
  127.      Appendix B. BBS Software compatible with C86Net . . . . . . . 26
  128.      Appendix C. Main C86Net . . . . . . . . . . . . . . . . . . . 26
  129.  
  130.  
  131.                                     -1-
  132.  
  133.  
  134.  
  135.  
  136.  
  137.  
  138.      I. Introduction
  139.         This document attempts to detail, in a haphazard manner, the network
  140.      known as C86Net.  C86Net is a BBS network protocol currently used by
  141.      Citadel-86 (for Z100s and PClones), NeoCitadel (PClones), STadel (Atari
  142.      STs), Amiga Citadel-68K (Amigas), Novucivitas, Asgard-86, and others.
  143.  
  144.      I.1 History
  145.         The original motivations for C86Net were two-fold: to provide an
  146.      interesting project exploring a topic the author had never studied
  147.      before, and to (ultimately) allow the sysops of Citadel-86s in the Twin
  148.      Cities area of Minnesota (aka Minneapolis/St. Paul) to communicate with
  149.      each other without having to call each other's boards; the number of
  150.      Citadels in the area was beginning to escalate, making it impossible
  151.      for gainfully employed sysops to talk conveniently.
  152.  
  153.         The first version of C86Net came into being in June of 1985, and is
  154.      better left unmentioned.  After learning from his mistakes and discussing
  155.      the entire project with John Stanley, a second version was attempted and
  156.      installed in all local Citadel-86s.  This, too, was a ghastly mistake,
  157.      but enough lessons were learned so the third version of C86Net could
  158.      be constructed in an expandable fashion allowing easy backward
  159.      compatability as the network facilities were expanded.  The installation
  160.      of the second and third versions mandated this ability: updating an
  161.      entire set of systems simultaneously is a nightmarish situation.
  162.  
  163.         The history of C86Net since then has consisted of two events: the
  164.      addition of new facilities as new needs were identified, and the
  165.      integration of non-Citadel-86 systems to C86Net networks.
  166.  
  167.         The exact chronology of adding facilities is not going to be detailed
  168.      here; it would be both tedious and useless.  However, the astute reader
  169.      will note several anomolies and redundancies in the facilities.  Be
  170.      advised this is what happens when the author is programming for both
  171.      learning and fun; another term is "programming by accretion."
  172.  
  173.         The first non-Citadel-86 system to join a C86Net was NeoCitadel, by
  174.      Hue, Sr., which started by supporting Net Mail.  Then a valiant, notable
  175.      effort was made by Lum the Mad, author of Lumadel, a very good Citadel
  176.      clone for the Apple II series of computers.  His networker, written in
  177.      Apple Basic, actually managed to communicate during several manual tests
  178.      with a Citadel-86.  However, an automated networker was never completed,
  179.      and Lumadel languished after Lum bought an IBM clone.
  180.  
  181.         Some Other BBS software compatible with C86Net includes Amiga
  182.      Citadel-68K as ported by Stallion aka Jay Johnson, and STadel as ported by 
  183.      David Parsons, both ports of Citadel-86, as well as Asgard-86 by Gary
  184.      Meadows and Novucivitas by Brent Barrett, both of Sacramento, CA, and
  185.      Fortress, a port of STadel, by Chris Camacho of Atlanta, GA.  This is not
  186.      a complete list.  See Appendix B for more detail.
  187.  
  188.  
  189.      I.2 Purpose
  190.         The purpose of this document is to detail C86Net at the byte level.
  191.      We will only talk about how the protocol should react to each condition.
  192.      We are not going to discuss what each facility "should" be used for,
  193.      although suggestions may be advanced, and most should be fairly obvious.
  194.  
  195.  
  196.  
  197.                                     -2-
  198.  
  199.  
  200.  
  201.  
  202.  
  203.  
  204.         If you only have a headache when you're done reading this, count
  205.      yourself lucky.  The author will probably know what a year's worth of PMS
  206.      is like.
  207.  
  208.      II. Overview
  209.         Just about any networking textbook will tell you most networks
  210.      can be divided into some set of layers (an example, the ISO Standard, is
  211.      fairly well explained in Computer Networks by Tannenbaum), and the
  212.      Citadel-86 Networking protocol is not an exception, in concept.  (NOTE:
  213.      no attempt is going to be made to use network terminology currently in
  214.      use by network experts.  Instead, the terminology I'll use will be what
  215.      I think best describes the subject matter.  As such, this document's
  216.      terminology may change from revision to revision as people discuss and
  217.      argue with me about it.)  Familiarity with such a textbook (or, better
  218.      yet, a real network implementation) is certainly suggested (unless you
  219.      have masochistic tendencies, like I did).
  220.  
  221.         The protocol seems to break down into just two layers.  The first can
  222.      be termed the "information transfer" layer, or the "link" layer; the
  223.      second can be described as the "application" layer.
  224.  
  225.                             ---------------------
  226.                             | Application Layer | -  -  -  -  -  -  -  -  -
  227.                             ---------------------
  228.                                      |  |\                      Another _____\
  229.              This node              \|  |                         node       /
  230.                            ------------------------
  231.                            | Information Transfer |  _  _  _  _  _  _  _  _
  232.                            |        Layer         |
  233.                            ------------------------
  234.  
  235.         The purpose of the Information Transfer Layer is to ensure (to the
  236.      extent possible) all information be conveyed from and to this system's
  237.      Application Layer from another system's Application Layer actually
  238.      succeeds in transmission.
  239.  
  240.         The purpose of the Application Layer is to accomplish useful work
  241.      during a networking session with another node.
  242.  
  243.         It should be apparent that the Application Layer is dependent on the
  244.      Information Transfer Layer.  Despite this dependency, most of this
  245.      document is dedicated to the Application Layer and its facilities,
  246.      since the Information Transfer Layer is very simple (not necessarily a
  247.      good sign).
  248.  
  249.         Whenever the acronym "ITL" is used, assume it means Information
  250.      Transfer Layer; similarly, the "AL" refers to the Application Layer.
  251.  
  252.      III. Information Transfer Layer
  253.         As mentioned, the ITL's purpose is to provide a stable communications
  254.      medium.
  255.  
  256.  
  257.  
  258.  
  259.  
  260.  
  261.  
  262.  
  263.                                     -3-
  264.  
  265.  
  266.  
  267.  
  268.  
  269.  
  270.         The keyword here is "stable".  In order to achieve this, several goals
  271.      must be accomplished during any given networking session in order for
  272.      overall success to be achieved, and these can be broken into two parts.
  273.  
  274.         The first part is called "Call Stabilization."  This part of the ITL
  275.      has the goal of establishing stabilization.  The section on Call
  276.      Stabilization will detail some of the problems associated with
  277.      Call Stabilization.
  278.  
  279.         The second part is the provision of a transfer medium.  In this
  280.      section, it is best to remember that looking at C86Net from a layer
  281.      viewpoint does not mean C86Net was built as a reflection of some
  282.      layer model.  This should lessen confusion.
  283.  
  284.      III.1 Call Stabilization
  285.         The purpose of this process is to establish quickly and efficiently
  286.      that the caller is another system on the net wishing to engage in a
  287.      networking session.  The design of call stabilization was driven by whim,
  288.      a wish for efficiency, and experience with earlier versions of C86Net.
  289.  
  290.         The problems consist of, first, users calling in during networking.
  291.      Call Stabilization is designed to stave off the fumblings of an honest
  292.      user who simply doesn't realize the networker is in effect by
  293.      forcing a "recognition code" to be given that would be difficult for a
  294.      casual user to generate.
  295.  
  296.         The second (and last) problem comes from the machines the network
  297.      was originally implemented on, which are Z-100s and IBMs using MS-DOS.
  298.      During the last few years the marketplace has literally been bombarded by
  299.      modems capable of multiple baud rates (300, 1200, 2400, and now 9600
  300.      looms on the scene), and can signal to the host system what the connect
  301.      baud rate is.
  302.  
  303.         The modems can typically have two methods of signaling the connect
  304.      baud rate: by sending a unique text string to the host at the serial port
  305.      baud rate, and via signals on the RS232 interface.
  306.  
  307.         Unfortunately, within my experience the use of the text strings for
  308.      divining baud rate is not completely reliable; and, ridiculously, both
  309.      IBM and Zenith completely neglected to make available the RS232 signals
  310.      on their serial ports that would have allowed the programmer to discover
  311.      the connect baud rate, with the exception of some internal modems on the
  312.      IBM.
  313.  
  314.         Therefore, Call Stabilization must allow some way for effective baud
  315.      rate connect detection to occur.  The Call Stabilization technique
  316.      currently in use does not seem to be too bad in achieving the objectives.
  317.  
  318.  
  319.  
  320.  
  321.  
  322.  
  323.  
  324.  
  325.  
  326.  
  327.  
  328.  
  329.                                     -4-
  330.  
  331.  
  332.  
  333.  
  334.  
  335.  
  336.         Here is the process (sort of) graphically, right after carrier detect:
  337.  
  338.                Caller                |                     Receiver
  339.                ------                |                     --------
  340.                            Systems detect carrier
  341.       Wait for full second           |                Wait for full second
  342.       Send following 3 bytes:        |                Begin waiting for the
  343.                7                     |                following three bytes:
  344.                13                    |                        7
  345.                69                    |                        13
  346.       and wait 4 seconds.            |                        69
  347.       If have not received a         |                 After the 4 second
  348.       correct response (see          |                 response wait, the
  349.       Receiver column), then         |                 Receiver can switch
  350.       resend the above 3 bytes.      |                 bauds if necessary.
  351.       This looping process should    |                 If get the above 3
  352.       only be repeated 20 times.     |                 bytes, then respond
  353.       If, on the 20th try, still     |                 instantly with:
  354.       have not received a correct    |                        ~7
  355.       response, HANGUP.              |                        ~13
  356.       If have received a correct     |                        ~69
  357.       response, send an ACK.         |                 and then wait for an
  358.                                      |                 ACK. This should end
  359.                                                        Call Stabilization.
  360.  
  361.         So, essentially, the caller waits a second, and then sends a 3 byte
  362.      sequence to the receiver.  When the receiver receives those 3 bytes
  363.      successfully, it replies with the logical negation of those 3 bytes.  The
  364.      caller then sends an ACK back, indicating the call is stabilized.
  365.      If the protocol fails 20 times, then the caller hangs up, assuming
  366.      something was wrong.
  367.  
  368.         The 7-13-69 sequence only has significance in that a casual user
  369.      probably won't generate it accidentally.
  370.  
  371.      III.2 Transfer Medium
  372.         The purpose of this part of the ITL is to provide a stable means of
  373.      transporting information to and from the other half of the networking
  374.      session.
  375.  
  376.         Take it as a caveat that this is neither "clean" or "elegant" by
  377.      any stretch of the imagination.  Just take a deep breath and start
  378.      reading (particularly if you're a networking professional!).  Also, this
  379.      is going to be difficult, seeing as I have troubles explaining it
  380.      coherently myself.  However, considering the fact that adding new
  381.      facilities to the Applications Layer has been simple as of late, I must
  382.      assume SOMETHING is being done right here.
  383.  
  384.  
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.  
  394.  
  395.                                     -5-
  396.  
  397.  
  398.  
  399.  
  400.  
  401.  
  402.         The Transfer Medium takes some stream of information and attempts to
  403.      transfer it to another system.  As such, it is under strategic control of
  404.      the Application Layer in terms of when to start and when to stop; another
  405.      way to explain it is the Application Layer will tell it to start
  406.      sending some stream of data, will tell it to stop sending, will tell it
  407.      to receive information from the other system, etc.  Details of when to
  408.      send, when to receive, etc., are contained in the sections on the
  409.      Application Layer, and will not be treated further in this section.
  410.  
  411.         One of the responsibilities of the Transfer Medium is to place no
  412.      interpretation on the data stream; the Transfer Medium only takes the
  413.      data and sends it to the other system's Transfer Medium, or receives the
  414.      data and sends it "up" to the Application Layer of the host system.  The
  415.      Application Layers involved make decisions as to what is to be done with
  416.      the data.
  417.  
  418.         So, what is the structure of the ITL Transfer Medium?  Currently,
  419.      the systems have four choices.  First, there is Ward Christiansen's
  420.      XMODEM protocol, which is the default and is always used during the
  421.      initial phases of a network session (and is, therefore, the required
  422.      transfer medium).  Citadel-86 usually uses XMODEM-checksum for transfers,
  423.      but XMODEM-CRC should function just as well, although due to the
  424.      handshaking overhead, the network may suffer performance degradation
  425.      when conversing with systems not supporting XMODEM-CRC.
  426.  
  427.         The other three transfer medium choices are YMODEM (single mode),
  428.      WXMODEM, and ZMODEM.  Activation of the alternatives is covered in Section
  429.      IV.7.
  430.  
  431.         At the risk of confusing the readers, let's hop ahead and state
  432.      the AL uses the ITL to transfer Facility Requests to and from nodes,
  433.      sending each Facility Request when needed.  Each Request is, or should
  434.      be, treated by the ITL as a separate file.  Therefore, the ITL should
  435.      send, or receive, each Request as a new file (where it stores it is an
  436.      implementation detail), with a new block 1, etc.  We'll try to provide
  437.      details at the end of this document.
  438.  
  439.  
  440.      IV. Application Layer
  441.         The Application Layer (AL), via the ITL, manages all of the work
  442.      to take place during a network session.
  443.  
  444.  
  445.  
  446.  
  447.  
  448.  
  449.  
  450.  
  451.  
  452.  
  453.  
  454.  
  455.  
  456.  
  457.  
  458.  
  459.  
  460.  
  461.                                     -6-
  462.  
  463.  
  464.  
  465.  
  466.  
  467.  
  468.  
  469.      IV.1 Overview
  470.         The following diagram graphically demonstrates the flow of control
  471.      during a C86Net network session.  Assume, of course, this is a
  472.      minimal diagram. The references to the ITL are provided for completeness'
  473.      sake and context.
  474.  
  475.        -----------------
  476.        |     CALL      |                ITL Territory
  477.        | STABILIZATION |       _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  478.        -----------------      /
  479.                |             /          AL Territory
  480.        _ _ _ _ | _ _ _ _ _ _/
  481.                |                RECEIVER TELLS CALLER CAN'T HANDLE COMMAND
  482.                |                    ____________________<___________
  483.                |                    |                              |
  484.        ----------------     ----------------     ------------      ^
  485.        | CALLER SENDS |_>___| CALLER SENDS |___>_| RECEIVER |___>__|
  486.        | ID & NAME    |     |   COMMAND    |     | RESPONDS |      |
  487.        ----------------     ----------------     ------------     \|/
  488.                                    |                               |
  489.                                    |                               |
  490.                                    |                        --------------
  491.                                    |                        |  RECEIVER  |
  492.                                    |                        |  TELLS     |
  493.                                    ^                        |  CALLER    |
  494.                                    |                        | CAN HANDLE |
  495.                                    |                        |   COMMAND  |
  496.                                    |                        --------------
  497.                                    |                               |
  498.                                    |                               |
  499.                                    |  UNLESS COMMAND IS    ----------------
  500.                                    _____________<__________| DO SPECIFIED |
  501.                                          'HANGUP'          | ACTION       |
  502.                                                            ----------------
  503.  
  504.         Call Stabilization has already been covered (III.1), so we shan't
  505.      speak of it further.  The diagram can be summarized as: caller identifies
  506.      itself, and then begins sending a sequence of Facility Requests.  Each
  507.      Request is dealt with by the receiver as received, and implies some set
  508.      of actions both systems are aware of.  Each Request's actions are
  509.      detailed in this document.
  510.  
  511.      IV.2 ID & Name
  512.         After receiving the ACK indicating end of Call Stabilization, the
  513.      calling system must identify itself to the receiver.  The caller sends,
  514.      in this order, nodeId & nodeName to the Transfer Medium, telling it to
  515.      send them to the receiver.
  516.  
  517.         nodeId, nodeName: Are normal null-terminated C strings.
  518.  
  519.         Neither the nodeId nor nodeName may exceed 20 bytes in length
  520.      (including the null byte terminating each string); therefore, the total
  521.      bytes of significant data the AL must deal with should not exceed 40.
  522.      This also implies the ITL should not send more than a sector
  523.      (128 bytes) worth of data.
  524.  
  525.  
  526.  
  527.                                     -7-
  528.  
  529.  
  530.  
  531.  
  532.  
  533.  
  534.         So, for example, let's say a system using the nodeName "Buffalo"
  535.      and with a nodeId of "US 612 477 0927" calls some other system. After
  536.      the WC session was over, the receiver's buffer or temporary file would
  537.      look like this
  538.  
  539.           Id            name
  540.      US 612 477 0927<0>Buffalo<0> <-balance of the sector is trash->
  541.  
  542.      IV.3 Facility Requests
  543.         After the caller identifies itself, the two systems go into a loop.
  544.      Each loop starts with the Caller sending a Facility Request.  A Facility
  545.      Request at the AL layer consists of at least one byte, which contains a
  546.      code indicating the Facility requested, and up to four optional
  547.      parameters which are used to convey other data required for the Facility.
  548.      Each of these parameters are normal C null-terminated strings, and none
  549.      may exceed more than 20 bytes in length, including the ending null byte;
  550.      they may be smaller if the entire 20 bytes is not needed.  The last of
  551.      the optional parameters, be there 0 or 4 of them, is always followed by a
  552.      0 byte.  A Facility Request not requiring any parameters would look like
  553.      this at the Application Layer:
  554.  
  555.        <facility-byte><0>
  556.  
  557.      and a Facility Request needing two parameters would look like this:
  558.  
  559.        <facility-byte><string1><string2><0>
  560.  
  561.         At the ITL level, the Facility Request byte comes first, followed by
  562.      each parameter; the rest of the sector is trash.
  563.  
  564.         The receiver, on receipt of the facility request, must decide if it
  565.      can execute the facility requested by the caller.  If so, the receiver
  566.      just sends back one byte, called GOOD, and then the network session
  567.      proceeds along the lines implied by the facility.  If the receiver cannot
  568.      execute the facility requested, it sends back a byte called BAD followed
  569.      by a null-terminated string < 126 characters which explains why the
  570.      facility cannot be executed.
  571.  
  572.        <Good>
  573.  
  574.        <Bad><error string>
  575.  
  576.         The actual values of GOOD and BAD are
  577.  
  578.       BAD:  0
  579.       GOOD: 1
  580.  
  581.         Section IV.5 through IV.9 detail all facilities currently supported by
  582.      Citadel-86 in C86Net, plus some proposed facilities.
  583.  
  584.  
  585.  
  586.  
  587.  
  588.  
  589.  
  590.  
  591.  
  592.  
  593.                                     -8-
  594.  
  595.  
  596.  
  597.  
  598.  
  599.  
  600.      IV.4 Message & File Transfer
  601.         When "transfer of messages" is mentioned below, we mean a series of 0
  602.      or more messages are to be sent from one system to the other.  When the
  603.      number of messages is 0, then it is not necessary to do more than start
  604.      and stop the ITL, which should be interpreted by the system receiving the
  605.      0 messages to mean 0 messages were received.
  606.  
  607.         When one or more messages are being sent, each should be in the format
  608.      detailed in Section VII.
  609.  
  610.         When more than one message is being sent, there should be no separator
  611.      between messages, due to the format messages are sent in.  Because
  612.      of the current character of the ITL, networking leaves us with
  613.      last sectors of which zero or more bytes will be trash.  Therefore, when
  614.      transferring messages, the balance of the last sector which has no meaning
  615.      can either be ^Z filled (vis a vis XMODEM rules) or space-filled.
  616.  
  617.         A file transfer implies one or more files are being sent.  There
  618.      is no data transformations applied to files at the AL layer, i.e., they
  619.      are sent (conceptually) byte by byte to the ITL for transfer.  The ITL,
  620.      being what it is, does not currently perform any transformations.  In the
  621.      future it may, but the ITL has the responsibility of ensuring
  622.      transformations inserted by the ITL are taken out before termination of
  623.      the ITL.
  624.  
  625.         Really, this may sound bad, but it's very easy.  "Clean up after
  626.      yourself."
  627.  
  628.      IV.5 Network Session Control Facilities
  629.         These facilities are used to control the overall behavior of a network
  630.      session.
  631.  
  632.      IV.5.a Hangup command
  633.         This facility is a simple 1-byte command telling the receiver to
  634.      hang up.  Unfortunately, the behavior of the receiver for this facility
  635.      depends on the state of the network session.  If this facility is used
  636.      while Role Reversal is active, then it signals the end of the Role
  637.      Reversal facility, and the receiver should send back a GOOD byte (see
  638.      Section IV.5.c).
  639.  
  640.         If this Facility is requested when the session is not indulging in
  641.      a Role Reversal, then the receiver does NOT send back either a GOOD or
  642.      BAD byte.  Instead, it just hangs up (i.e., terminates the Network
  643.      session).
  644.  
  645.         The value of the Hangup byte is 0.
  646.  
  647.  
  648.  
  649.  
  650.  
  651.  
  652.  
  653.  
  654.  
  655.  
  656.  
  657.  
  658.  
  659.                                     -9-
  660.  
  661.  
  662.  
  663.  
  664.  
  665.  
  666.      IV.5.b Error Code Support
  667.         This Request asks the receiver if his system can transmit Error Code
  668.      responses to Requests. This Request must be exercised and accepted as
  669.      GOOD before the receiver can use the Error Code response instead of the
  670.      BAD response when reporting his ability to support a particular facility
  671.      requested.
  672.  
  673.         The value of the Error Code Support byte is 200.
  674.  
  675.         Citadel-86 does not currently support this facility.
  676.  
  677.      IV.5.c Role Reversal
  678.         In order to make networking more efficient in nets using room
  679.      sharing concepts, it has become a necessity to allow "role reversal"
  680.      during the networking period.  The term "role reversal" means during
  681.      the period of a call, two systems, supposing they are adequately
  682.      equipped, may exchange their roles of "caller" and "receiver", and then
  683.      continue to network, with the real receiver now becoming the "caller",
  684.      and vice versa.  All services should be supported under role reversal.
  685.  
  686.          When role reversal is agreed upon by the two systems (this is defined
  687.      to be the point at which the receiver has replied GOOD to the caller),
  688.      the two systems now switch roles.  The caller, who has now become the
  689.      receiver, now starts waiting for the first facility request from the
  690.      receiver, who has now become the caller.
  691.  
  692.         The caller and receiver should, of course, be aware of who is who;
  693.      this is why the stage of CALLER SENDS NAME & ID is skipped during role
  694.      reversal.
  695.  
  696.         The end of role reversal is signaled by the original receiver (now the
  697.      caller) by sending the HANGUP command.  The original caller (now the
  698.      receiver) acknowledges this (reply GOOD), and at this point, the two
  699.      again reverse roles. Note that the HANGUP command has been modified in
  700.      this one contextual instance to act differently from its normal behavior.
  701.  
  702.         The value of the Role Reveral byte is 201.
  703.  
  704.      IV.6 Data Transfer Facilities
  705.         These facilities support transfer of various sorts of data between
  706.      nodes.
  707.  
  708.      IV.6.a Normal Mail
  709.         This facility is a parameterless facility which is designed to allow
  710.      transfer of Mail> from the transmitter to the receiver.  If the receiver
  711.      signals it can receive Mail>, then the transmitter should begin
  712.      transmitting all Mail messages destined for the receiver via the ITL.
  713.  
  714.         The value of the Normal Mail byte is 1.
  715.  
  716.      IV.6.b Room File Requests
  717.         This facility is used to request one file from the receiver.  It has
  718.      two parameters, the name of the room the file is located in
  719.      (parameter 1), and the name of the file to be transferred (parameter 2).
  720.  
  721.  
  722.  
  723.  
  724.  
  725.                                     -10-
  726.  
  727.  
  728.  
  729.  
  730.  
  731.  
  732.         If the receiver is willing to transfer the specified file to the
  733.      transmitter, it should send back a GOOD byte, and then tell the ITL to
  734.      send the file to the transmitter, which should be ready to receive the
  735.      file.
  736.  
  737.         If the receiver will not or can not satisfy the request, then it should
  738.      return a BAD byte.  The reasons for not satisfying this request are, of
  739.      course, implementation dependent, but they can include such reasons as
  740.      non-existence of room, non-existence of file, sheer peevishness, etc.
  741.  
  742.         This facility is an anachronism, retained for backward compatability.
  743.      The facility Ambiguous Room File Requests is a better choice.
  744.  
  745.         The value of the Room File Request byte is 2.
  746.  
  747.      IV.6.c Ambiguous Room File Requests
  748.         This facility is an expansion of IV.6.b, and very similar to it.  It,
  749.      too, has two parameters, the first the name of the room and the second
  750.      the name of the file requested.  However, the second parameter can safely
  751.      be used to specify an ambiguous set of files if the user so chooses.
  752.  
  753.         If the receiver consents to send the requested files to the
  754.      transmitter, then it should send back a GOOD byte.  At this point, the
  755.      procedure diverges from used in IV.6.b.  For each file to be sent to
  756.      the transmitter by the receiver, it first sends via the ITL two strings
  757.      (null-terminated), which, in order, are the name of the file, and the
  758.      size of the file in 128 byte sectors.  If the file SEX.ED was 12877 bytes
  759.      long, the receiver would send
  760.  
  761.                     SEX.ED<0>101<0>
  762.  
  763.         These two strings constitute in themselves a separate transfer; in ITL
  764.      terms this means a separate XMODEM transfer, as if we were sending a
  765.      single file just ahead of the real file.
  766.  
  767.         The transmitter does nothing but receive these pairs for each file
  768.      it will receive.  When the receiver has no more files to send satisfying
  769.      the request for files, it sends one more of the pre-file headers,
  770.      in which the length of the file name is 0.  This indicates the end of this
  771.      facility.
  772.  
  773.         The value of the Ambiguous Room File Request byte is 3.
  774.  
  775.  
  776.      IV.6.d Ambiguous Room File Requests With Approval
  777.         This is a non-implemented facility, which is not yet completely
  778.      defined.
  779.         The value of the Ambiguous Room File Request With Approval byte is 4.
  780.  
  781.  
  782.  
  783.  
  784.  
  785.  
  786.  
  787.  
  788.  
  789.  
  790.  
  791.                                     -11-
  792.  
  793.  
  794.  
  795.  
  796.  
  797.  
  798.      IV.6.e Network Room
  799.         This facility is used to send 0 or more messages from one system to
  800.      another for a specified room.  The room these messages are coming
  801.      from is the sole parameter of this facility. If the receiver is willing
  802.      to accept the messages for delivery to the room on the receiver's system,
  803.      it replies GOOD to the caller, and then begins data transfer of the
  804.      messages in the same manner as it would for Mail transfer.  It it does
  805.      not wish to accept the messages (for whatever reason) from the caller, it
  806.      then replies BAD.
  807.  
  808.         The value of the Network Room byte is 5.
  809.  
  810.      IV.6.f Check Mail
  811.         The Normal Mail facility does not contain any provisions for checking
  812.      to see if Mail messages can be delivered to the designated recipients.
  813.      This command provides that facility.  If the receiver chooses to accept
  814.      this command, it should send a GOOD byte, and then cycle through the Mail
  815.      messages already received from the caller.  For each undeliverable message
  816.      the receiver should send back a byte and three strings which describe the
  817.      reason the Mail message cannot be delivered.  The three strings, in the
  818.      order they should be sent, should contain the following information:
  819.  
  820.              String 1: Author of the Mail> message.
  821.              String 2: Recipient of the Mail> message.
  822.              String 3: Error "context."  This field should contain a message
  823.                        describing (in English) something useful about the
  824.                        error.  Citadel-86 currently fills this with the date
  825.                        and time of the message, suitable for sending to the
  826.                        author of the failed message.
  827.  
  828.         All three of these strings must be present.  Any or all of the three,
  829.      however, may be of 0 length.  None may exceed 20 characters in length
  830.      (including the 0 byte).
  831.  
  832.         The values of the byte are:
  833.  
  834.       NO_RECIPIENT    1  -- This reason indicates there is no such
  835.                             recipient on the Receiver system. Note the
  836.                             second string following this reason byte normally
  837.                             contains the name of the unknown recipient.
  838.       BAD_FORM        2  -- This reason indicates there was no "To" field
  839.                             in the message.  Usually is a symptom of
  840.                             programming error.
  841.       UNKNOWN         99 -- Something really* odd happened.  The context
  842.                             string (#3) should perhaps contain the number (on
  843.                             the Caller system) of the message, so it may
  844.                             be investigated later.
  845.  
  846.         After all of the negative acknowledgements of Mail> have been sent
  847.      back, the receiver sends one more byte, which is called the NO_ERROR
  848.      byte. It indicates there are no more errors to be sent to the
  849.      transmitter.  If there were no bad Mail messages in the first place, then
  850.      the only real data the receiver would return to the transmitter
  851.      would be the NO_ERROR byte.  The value of the NO_ERROR byte is 0.
  852.  
  853.  
  854.  
  855.  
  856.  
  857.                                     -12-
  858.  
  859.  
  860.  
  861.  
  862.  
  863.  
  864.         All negative acknowledgements, plus the NO_ERROR byte, are sent as a
  865.      single stream of data, not as separate ITL transfers!
  866.  
  867.         The value of the Check Mail byte is 6.
  868.  
  869.      IV.6.g Send File
  870.         This facility allows the sysop to send a file to another system.
  871.      There are three parameters associated with this request: The name of the
  872.      file the sender wishes to send to the receiver, and the size of the
  873.      file, first in terms of sectors (CP/M compatibility, if ever any CP/M
  874.      Citadels wish to join the net), and then in just bytes. (Remember, these
  875.      are really just ASCII strings.)
  876.  
  877.         The file is sent only upon positive acknowledgement of this request.
  878.      However, it should not be assumed a negative response implies
  879.      the facility is not supported.  Since the size of the file is sent along
  880.      with the request, the receiver may decline to receive the file due to
  881.      space considerations, but could receive a smaller file.
  882.  
  883.         The value of the Send File byte is 7.
  884.  
  885.      IV.6.h Alternate Room Sharing
  886.         This facility was motivated by the LD room sharing network, due to the
  887.      fact that a system willing to absorb the expense of sharing rooms
  888.      at LD may not be willing to support the additional costs occurring
  889.      from the role reversal command (for instance, very large files being sent
  890.      or requested by the receiving system).
  891.  
  892.         This facility solves the above problem.  Succinctly, it notifies the
  893.      receiving system the caller wishes to share the specified room.  Upon
  894.      receiving a positive acknowledgement, the caller proceeds to send all
  895.      net messages destined for the receiver.  When finished, the
  896.      receiver sends all net messages destined for the caller for the specified
  897.      room.  This is most commonly used for C86Net routing.
  898.  
  899.         Usually, messages from systems other than the two involved in the
  900.      network session will be passed to other systems using this Facility.
  901.  
  902.         The value of the Alternate Room Sharing byte is 8.
  903.  
  904.      IV.6.i Message Compaction
  905.         This facility allows an optional compaction of all messages transferred
  906.      during a network session, whether it be Mail, room sharing, or whatnot,
  907.      no matter which direction is selected.  Such compaction serves to shorten
  908.      network sessions.  When this facility is used and the receiver agrees to
  909.      it, all further message transfers will be compacted using the agreed upon
  910.      method.
  911.  
  912.         This facility has a single parameter, which is used to indicate which
  913.      type of compaction is to be used.  More efficient methods can therefore
  914.      be added easily.
  915.  
  916.         The only currently valid parameter value is:
  917.  
  918.         "0" -- Compact messages using C-86 proprietary method.
  919.  
  920.  
  921.  
  922.  
  923.                                     -13-
  924.  
  925.  
  926.  
  927.  
  928.  
  929.  
  930.         The "0" compaction method is a low-efficiency method, more for testing
  931.      than for actual use.  It only achieves 20-30% compaction in limited
  932.      testing.  New methods will be added as whim takes us.
  933.  
  934.         The value of the Message Compaction byte is 10.
  935.  
  936.      IV.6.j Route Mail
  937.         C86Net RouteMail is triggered using this Facility Request.  C86Net
  938.      RouteMail functions by passing Mail on from a Source system (the system
  939.      which generates a piece of Mail meant for another system to which the
  940.      system is not directly connected) to the Target system (the ultimate
  941.      target of said Mail) by asking each system in turn to send the Mail
  942.      meant for the Target.  Included in this "request" is an optional "domain"
  943.      designator" which can be used by intervening systems as a hint as to
  944.      where the mail should be routed in order to reach its ultimate destination.
  945.      How each intervening system wishes to route the Mail onwards is up to the
  946.      system, whether it be via an implementor's extension or using C86Net
  947.      RouteMail.  Citadel-86 systems, if they do not connect directly with a
  948.      given system, only know what system to ask to pass the Mail onwards, based
  949.      on the domain designation (if present) or the node id.
  950.  
  951.         This Request currently has three parameters.  The first parameter
  952.      of this Request is the Node ID of the system for which the Mail is
  953.      meant (which can be just " " if it's not known), the second parameter is
  954.      the Name of the system, and the third parameter is the domain of the
  955.      target system.  Usually, the Node Id should be used for identifying the
  956.      target system, since the name of any system is not guaranteed to be the
  957.      same across all systems' nodelists, but if the domain is provided then it
  958.      can be used as a mechanism for getting the mail to a domain "server", and
  959.      then the server should be able to make a positive ID on the system and
  960.      deliver the Mail.  If the receiving system can, or thinks it can, transfer
  961.      the Mail to the target system, it should reply GOOD.  The sender should
  962.      then transfer the Mail to the receiver.  If the receiver can not in good
  963.      conscience accept the Mail for delivery, it should reply BAD.
  964.  
  965.         Note it is perfectly valid to not only encounter several Route
  966.      Mail requests during a network session, but to even receive more than
  967.      one with identical parameters during a network session.
  968.  
  969.         The value of the Route Mail byte is 9.
  970.  
  971.      IV.6.k Mass Transfers
  972.     This facility used to transfer nearly all the messages destined for
  973.      the receiving system in a selectable standard compressed format using
  974.      a selectable high speed protocol.
  975.  
  976.      IV.6.k.1 Request Parameters
  977.      String 1: Identifies proposed compaction method.  String definitions:
  978.  
  979.       "1" - LHA
  980.       "2" - PKZIP
  981.       "3" - ZOO
  982.       "4" - SEA ARC
  983.       "5" - ARJ
  984.  
  985.      String 2: Protocol Override Field.  This allows specification of a protocol
  986.      other than the current default transmission protocol.  Since we are now
  987.      sending a file, it should not be difficult to implement ZMODEM or other
  988.      fast protocol.  NOTE: This protocol only applies to the actual file of
  989.      messages (in compacted form) that is transferred, not to any of the
  990.      bureaucratic overhead.  String definitions:
  991.  
  992.       "-1" - use current transmission protocol.
  993.       "0"  - use XMODEM.
  994.       "1"  - use YMODEM.
  995.       "2"  - use WXMODEM.
  996.       "3"  - use ZMODEM.
  997.  
  998.       NOTE: The last four values are the same as used for Facility Request 100.
  999.  
  1000.      String 3: Message Format field.  This field controls how the messages of
  1001.      the various rooms are stored in the compressed file.  This will allow the
  1002.      controlled exploration of optimization of message transmission.  The only
  1003.      valid value (see below) at the moment does not represent the ultimate
  1004.      optimization possible; for example, some experimentation reveals placing
  1005.      all outgoing messages into a single files before compression may represent
  1006.      a significant savings (due to internal file overhead savings).  A single
  1007.      example is the that an LZH file generated in the format currently used was
  1008.      around 27K, while placing all outgoing messages into a single file before
  1009.      compression resulted in a LZH file of about 25K, a savings of a bit more
  1010.      than 2K.  The same experiment with PKZIP revealed similar savings.
  1011.  
  1012.       "0" - File per Room format.  In this format the compressed file will
  1013.      contain one file per room format.  This format is detailed below.
  1014.  
  1015.       No other values are currently supported.
  1016.      
  1017.       String 4: Reserved.  Please place an Ascii "-1" (i.e., strcpy(field, "-1")
  1018.      in this field.
  1019.  
  1020.      IV.6.k.2 Summary
  1021.     This facility allows the combination of all normal room messages (that
  1022.      is, excluding Mail and Mail Routing) are collected into one or more files,
  1023.      compacted using standard compaction programs available on at least a few
  1024.      varieties of computers, and transferred as one file, possibly using a
  1025.      high-performance protocol such as Zmodem.
  1026.  
  1027.     This facility requires some off-line message management in order to
  1028.      minimize the amount of connect time actually used.
  1029.  
  1030.      IV.6.k.2 Detailed Data Flow
  1031.     See above for definitions of parameters of the initial facility request.
  1032.      If a system cannot support a given combination, the other system may feel
  1033.      free to attempt to use a different combination.  However, if a new archived
  1034.      file must be created, this may create unsightly delays.  Administrative
  1035.      procedures may have to be indulged in by sysops rather than having the
  1036.      software attempt to negotiate a workable combination.
  1037.  
  1038.     Once the receiving system accepts this facility request and accepts it,
  1039.      the next transfer is of a file (called the Proposal File) detailing the
  1040.      rooms the sender wishes to transfer.  This is sent as a simple text file
  1041.      (UNIX-style -- linefeed indicates end of line) using the usual network
  1042.      protocol (NOT the protocol mentioned in parameter 2, above), in which each
  1043.      pair of lines is a record.  The first line of each pair is a room name the
  1044.      caller wishes to transfer; the second is a filename (to be found in the
  1045.      transferred archive file -- if such is appropriate, but the two field
  1046.      record should still be used) that will contain the messages destined for
  1047.      that room.  A blank line indicates the end of list.  A text file format
  1048.      was selected both for simplicity of processing and of debug.
  1049.  
  1050.     The receiving system now sends a file (again, using the network
  1051.      protocol currently in effect, not the protocol mentioned above) back to
  1052.      the sending system indicating what problems, if any, the receiver has.
  1053.      This, too, is a text file, in which the first blank line of the text file
  1054.      indicates end of text file (and of problem report).  If the first line is
  1055.      blank, then the proposal of the sender is acceptable.
  1056.  
  1057.     But if the first line is NOT blank, then it should be the name of a
  1058.      room the receiver does not wish to receive.  Succeeding lines can contain
  1059.      more rooms that it won't accept that were present in the proposal of the
  1060.      sender.  The sender can use this list to generate a new facility request,
  1061.      although Citadel-86 itself will not attempt that.
  1062.  
  1063.     Anyways, if the receiver refuses to receive one of the rooms, then this
  1064.      facility is terminated at this point.  If the receiver makes no complaints,
  1065.      however, then the next step is to allow the sender up to two minutes to
  1066.      prepare the compressed file.  The sender indicates it is ready to proceed
  1067.      by sending a single ACK to the receiver.  The receiver should detect this
  1068.      and immediately begin receiving the archive file (using the protocol
  1069.      specified in String 2 of the facility request).
  1070.  
  1071.     If the receiver never receives the ACK, at the end of two minutes it
  1072.      should attempt to start its reception regardless.  If the reception fails
  1073.      then the network session should be deemed a failure and carrier dropped.
  1074.  
  1075.     Once the reception of the mass transfer file is complete, one more
  1076.      action must take place.  Since external protocols are definitely
  1077.      candidates for transfer links, we must be able to positively identify if a
  1078.      file has been transmitted, yet not all external protocols can be depended
  1079.      on telling the system if such has occurred. Therefore, the receiving
  1080.      system should, once the file reception has finished (and no matter what
  1081.      protocol is in use), check to see if the file actually was received and
  1082.      send back a packet (using the normal network protocol currently in use) of
  1083.      which only the first byte is significant.  If the value of the byte is
  1084.      GOOD, then the transfer was successful, if BAD then it was not successful.
  1085.      Astute network developers will note this is the same packet used for
  1086.      responding to Facility Requests (and thus should be exceedingly easy to
  1087.      implement).
  1088.  
  1089.      IV.6.k.2 File Format (String 3, option "0")
  1090.     The file containing the messages will be an archive file containing one
  1091.      or more files containing room messages to be integrated into the message
  1092.      base of a given system.  The exact format of the file depends on the
  1093.      archive method negotiated by the systems (see above); the names of the
  1094.      archived files and what rooms they relate to are entirely up to the
  1095.      sender, although they should be restricted to DOS limitations.  The
  1096.      mapping of filename to room is contained in the proposal file.
  1097.  
  1098.      IV.6.k.3 Errata
  1099.     o Only one archive file per net session should be sent.
  1100.  
  1101.     o Rooms can be sent both via archive file and normal room sharing
  1102.      commands during a network session.  Those sent via the archive file should
  1103.      be assumed to be "earlier" (older) than those coming via the room sharing
  1104.      facilities.  This practice is not recommended, however.
  1105.  
  1106.     o Rooms with zero length names cannot be sent using Mass Transfer.
  1107.  
  1108.     o C86 will be caching normal room messages just before calling the
  1109.      systems in question, or during the net session itself if the installation
  1110.      is called, rather than after a user logs out, after a net session, etc.
  1111.      This is due to the fact that sometimes inappropriate messages are left in
  1112.      net rooms by users which need to be deleted.  Management would be a
  1113.      nightmare to handle message deletions if messages are cached at first
  1114.      opportunity, so C86 will be doing it only during net times.  Hopefully,
  1115.      most installations using this option will be on h/w capable of caching
  1116.      and compressing messages quickly. 
  1117.  
  1118.     Virtual rooms are immediately cached on receipt, however.
  1119.  
  1120.     o As a later observation, it may become necessary to schedule a
  1121.      "caching" event for caching systems just before they are expected to call
  1122.      in.  This will make transfers more efficient at the cost of doing a cache
  1123.      before the net call begins -- that is, making us slightly vulnerable to
  1124.      village idiots getting their messages into a cache file.  Wise scheduling
  1125.      will keep that window small enough not to matter.
  1126.  
  1127.      IV.7 ITL Alternate Realities
  1128.         These facilities are used to attempt to change transfer medium types
  1129.      (communication protocols).  When two systems begin a Network Session,
  1130.      they should communicate via XMODEM.  However, while XMODEM is fairly
  1131.      reliable, it is a touch slow.  Therefore, it may be worthwhile for
  1132.      the two systems to attempt to switch from XMODEM to another protocol.
  1133.  
  1134.         At this point we should point out this command does not fit
  1135.      neatly into the ITL/AL layering.  Formally, this command should be
  1136.      confined to the ITL layer, without the AL layer knowing anything about
  1137.      it.  However, it has been decided this Facility Request will be
  1138.      transmitted and received just like any other Facility Request, thus
  1139.      impacting the AL.
  1140.  
  1141.  
  1142.  
  1143.  
  1144.  
  1145.                                     -14-
  1146.  
  1147.  
  1148.  
  1149.  
  1150.  
  1151.  
  1152.         Alright, enough of the nitpicking.  This Facility Request has
  1153.      one parameter connected with it, and it indicates which protocol the
  1154.      transmitter wishes to switch to for ITL transfers.  Whether or not
  1155.      the receiver can use this protocol, neither system should switch
  1156.      to the new protocol until the receiver has acknowledged the Facility
  1157.      Request, whether it be negatively or positively.  This allows one
  1158.      system to request a protocol the receiver does not support without
  1159.      mass confusion arising.
  1160.  
  1161.         The four currently valid parameter values are:
  1162.  
  1163.         "0" -- Indicates a request for XMODEM.  (Superfluous.)
  1164.         "1" -- Indicates a request for YMODEM.
  1165.         "2" -- Indicates a request for WXMODEM.
  1166.         "3" -- Indicates a request for ZMODEM.  (not supported in C86.)
  1167.  
  1168.         As indicated, the parameter values are really ASCII strings, not
  1169.      binary data.
  1170.  
  1171.         The value used for changing ITL transfer mediums is 100.
  1172.  
  1173.      IV.8 Security
  1174.         These facilities address security concerns on the network.
  1175.  
  1176.      IV.8.a System Net Password
  1177.         This facility provides a rough security system by allowing a string
  1178.      designated to be a password to be sent by the caller to the receiver.
  1179.      The protocol itself does not designate what a bad (or good) password
  1180.      should mean to the receiving system; this is up to the implementors.  As
  1181.      an example, the implementor of Citadel-86 has made the following
  1182.      decisions (this is [or should be] detailed in NETWORK3.MAN):
  1183.  
  1184.       o If there is no password listed for this system, and none is sent, or a
  1185.         zero-length password is sent, then the caller is assumed to be
  1186.         validated, and all commands will be whole-heartedly executed.
  1187.       o If the caller sends a password matching (non case-sensitive) with
  1188.         the password the receiver has recorded for the caller, then the
  1189.         caller is validated and all commands will be executed.
  1190.       o If the caller sends an invalid password, then the receiver will do
  1191.         nothing useful during role reversal, and will not respond positively
  1192.         to role reversal requests.
  1193.  
  1194.         Technically, this command is very simple.  The caller sends the
  1195.      command byte to the receiver, and the first parameter of the command byte
  1196.      contains the password (<= 20 including terminating NULL).  The receiver
  1197.      ALWAYS responds positively, whether or not the password matches.
  1198.  
  1199.         The value of the System Net Password byte is 202.
  1200.  
  1201.      IV.9 Other Reserved Facility Byte Values.
  1202.         Byte values 11 - 13 are reserved for STadel routing.
  1203.  
  1204.         Before using any other byte values, please try to coordinate with
  1205.      whomever else is implementing C86Net.
  1206.  
  1207.  
  1208.  
  1209.  
  1210.  
  1211.                                     -15-
  1212.  
  1213.  
  1214.  
  1215.  
  1216.  
  1217.  
  1218.  
  1219.      IV.10 Facilities -- Short List
  1220.             Name    |     Byte Value  |   Description
  1221.             ----    |     ----------  |   -----------
  1222.      Hangup         |         0       |   End a network session or role
  1223.                     |                 |           reversal.
  1224.      Error Code     |       200       |   Alternate error reporting (not
  1225.                     |                 |           implemented on Citadel-86).
  1226.      Role Reversal  |       201       |   Role reveral.
  1227.      Normal Mail    |         1       |   Send Mail.
  1228.      File Request   |         2       |   Request a File.
  1229.      Ambiguous FR   |         3       |   Ambiguous File Request.
  1230.      AFR w/ approval|         4       |   Ambiguous File Request With Approval
  1231.                     |                 |           (not implemented).
  1232.      Network Room   |         5       |   Send messages from room to system.
  1233.      Check Mail     |         6       |   Check Mail previously sent.
  1234.      Send File      |         7       |   Send File to system.
  1235.      Alt Room Net   |         8       |   Share room alternate system (routing).
  1236.      Route Mail     |         9       |   Mail Routing
  1237.      Message        |        10       |   Compact all messages during network
  1238.          Compaction |                 |   session
  1239.      ITL change     |       100       |   Change ITL communication protocol.
  1240.      System pwd     |       202       |   System password.
  1241.      STadel         |       11-13     |   STadel
  1242.         reserved
  1243.  
  1244.      V. Minimal Compatability Requirements
  1245.         In order for a system to be compatible with C86Net at a minimal level,
  1246.      it must satisfy requirements at the ITL and AL levels.
  1247.  
  1248.         At the ITL level, it must be able to call stabilize and use the XMODEM
  1249.      style of transfer for all facilities supported at the AL level.  This
  1250.      includes the SYSTEM ID following call stabilization.
  1251.  
  1252.         At the AL level, technically the minimum facility support you
  1253.      need is only the Hangup facility (Section IV.5.a).  However, that's
  1254.      hardly useful, so a practical minimum would be the Hangup and Mail
  1255.      commands.
  1256.  
  1257.      VI. Anytime Netting
  1258.         While this document was originally written to only address the behavior
  1259.      of two C86Net-compatible systems during a network session, it seems
  1260.      some brief mention of "anytime netting" might be appropriate in this
  1261.      document.
  1262.  
  1263.         When C86Net was first implemented in Citadel-86, one of the design
  1264.      decisions made was systems would communicate at a set time during
  1265.      the nighttime hours in order to exchange messages and other data.
  1266.  
  1267.         This, as it turns out, was a very simplistic decision, and when the
  1268.      idea of "events" was introduced by David Parsons, they were immediately
  1269.      seized upon as a way to allow multiple net sessions during a day.  This
  1270.      greatly expanded the flexibility of the network.
  1271.  
  1272.  
  1273.  
  1274.  
  1275.  
  1276.  
  1277.                                     -16-
  1278.  
  1279.  
  1280.  
  1281.  
  1282.  
  1283.  
  1284.         However, since most systems did not wish to take up daytime (i.e.,
  1285.      "prime time") hours with static net sessions, delays in delivery of net
  1286.      messages to other systems were still large, and with the network reaching
  1287.      international proportions, forcing messages to traverse several
  1288.      backbones to reach all systems, propagation delays were becoming
  1289.      irritating.
  1290.  
  1291.         At that point, several groups indicated a great deal of interest in
  1292.      "anytime netting", and several people implemented it.  After some
  1293.      unfortunately boneheaded delay, Citadel-86 has implemented it.
  1294.  
  1295.         While the method of deciding when a net session is to be held between
  1296.      systems is not part of the definition of C86Net, it would appear
  1297.      anytime-netting is handy enough to be worth a short note.  Basically, to
  1298.      handle anytime-netting, a C86Net compatible system must be able to accept
  1299.      a C86Net call during anytime of the day or night, and may optionally be
  1300.      able to call out during the day to other selected C86Net systems.
  1301.      Apparently (and this is rather tentative), the best method of detecting
  1302.      a C86Net call is to scan the input for a binary 7 (the first byte of
  1303.      stabilization) when a call is detected by a system.  If a 7 is detected,
  1304.      then the receiving system should stop output at once (if it has some form
  1305.      of autobaud) and switch to network mode.
  1306.  
  1307.  
  1308.      VII. Message Transfer Format
  1309.         A C86Net message (like the original Citadel message format) consists
  1310.      of a collection of C strings (ASCII text followed by a null byte).  Each
  1311.      of these strings is the value of some part of the message; precisely which
  1312.      part is identified by the first byte of the string, and this byte is known
  1313.      as the field identifier for this string.
  1314.  
  1315.         Fields may come in any order, except the Message field text is the
  1316.      last field of the message, and must always be present.  Most other fields
  1317.      of a message do not have to be present, but it is recommended that as
  1318.      many as are practical be filled in, particularly the date, time, system
  1319.      origin, and message number fields, since these may be used for 'vortex'
  1320.      control.
  1321.  
  1322.         Any data following the null byte of the message field is considered
  1323.      to be either garbage or part of the next message, if more than one message
  1324.      has been sent.
  1325.  
  1326.      VII.1 Field types
  1327.         The fields of a C86Net message seem to fall into three categories,
  1328.      displayable, non-displayable, and special.  Fields which are 'displayable'
  1329.      are generally fields of interest to the user, such as the author of the
  1330.      message, the text of the message, etc.
  1331.  
  1332.         Fields which are 'non-displayable' usually contain information useful
  1333.      for housekeeping on the net.
  1334.  
  1335.         The following sections cover all three types of fields in detail,
  1336.      including suggested formats for data.
  1337.  
  1338.  
  1339.  
  1340.  
  1341.  
  1342.  
  1343.                                     -17-
  1344.  
  1345.  
  1346.  
  1347.  
  1348.  
  1349.  
  1350.      VII.1.a Displayable fields
  1351.         As noted, these fields usually contain data of interest to the human
  1352.      readers.  Each field is treated separately.  Normally there should only
  1353.      be one instance of each field in a message; exceptions will be noted.
  1354.  
  1355.         Message Author: Field identifier 'A' identifies an author field.  This
  1356.      field may be no more than 128 bytes (including the trailing null byte), and
  1357.      should contain the name of the author of the message.
  1358.  
  1359.         Message Date: Field identifier 'D' identifies a date field.  This
  1360.      field, limited to 20 bytes, should contain only the date when the message
  1361.      was entered.  Current standard format is yymmmdd, such as "89Jan01".
  1362.      Note that by adhering to this format, and others like it, individual
  1363.      software packages may more easily customize message headers when
  1364.      displaying messages from foreign systems, and allow the foreign systems
  1365.      to do likewise.
  1366.  
  1367.         Message Time: Field identifier 'C' identifies a time field.  This
  1368.      field, limited to 20 bytes, should contain only the time the message was
  1369.      entered.  Current standard format is hh:mm <am | pm>, such as "12:44 pm".
  1370.  
  1371.         System Origin: Field identifier 'N' identifies a system origin field.
  1372.      This field, limited to 20 bytes, should contain the name (human readable)
  1373.      of the system this message originated on.  It is NOT recommended this
  1374.      field be used for housekeeping purposes!
  1375.  
  1376.         System Domain: Field identifier 'X' identifies the home domain of
  1377.      the system.  This field should only be filled in if domains are actually
  1378.      implemented in your software, since other systems on the net will use
  1379.      a combination of domain and system name to reply to net Mail.
  1380.  
  1381.         Message Recipient: Field identifier 'T' identifies a To field.
  1382.      This field, limited to 128 bytes, should contain the name of the recipient
  1383.      of this mail message.  Non-mail messages may contain 'T'o fields, too,
  1384.      but delivery of such messages should not be expected (see Facility Request
  1385.      1, above).  Normally, this field is used to deliver network mail to users,
  1386.      but see the 'w' field, below.
  1387.  
  1388.         Other Recipients: Field identifier 'W' identifies an Other Recipient
  1389.      ("Who else?") field.  This field, limited to 61 bytes, identifies a
  1390.      recipient of Mail other than the primary recipient.  It is not, however,
  1391.      a field which should be used for Mail delivery by recipient systems; it
  1392.      is transmitted purely for cosmetic reasons.  See the 'w' field, below.
  1393.      There may be more than one Other Recipient field in a message.
  1394.  
  1395.         OtherNet Address: Field Identifier 'P' identifies an "OtherNet
  1396.      Address".  This is a free form string which is used to form addresses
  1397.      of use to other networks, such as USENET, FidoNet, etc.  This is filled
  1398.      in by users sending Mail to systems on other nets, and can also contain
  1399.      "return address" information for messages coming in from other Nets.
  1400.  
  1401.         Message Text: Field identifier 'M' identifies a message text field.
  1402.      This field is currently limited to 7499 bytes, but this is an artificial
  1403.      limit and should be done away with someday.  This text should be in
  1404.      normal Citadel format, except all Carriage Returns should become
  1405.      Line Feeds during transmissions (for obscure historical reasons).
  1406.  
  1407.  
  1408.  
  1409.                                     -18-
  1410.  
  1411.  
  1412.  
  1413.  
  1414.  
  1415.      VII.1.b Non-Displayable fields
  1416.         System ID: Field identifier 'O' identifies a system id field.  The
  1417.      system id field, limited to 20 bytes, identifies a system at program
  1418.      level.  This field should be used for any housekeeping purposes which
  1419.      involve identifying other systems.  The current format of the data of
  1420.      this field is traditional Citadel system id, e.g., "US 612 431 1107",
  1421.      since this is a relatively static value for most systems -- far more
  1422.      static than the 'N' field has turned out to be.
  1423.  
  1424.         Room ID: Field identifier 'R' identifies a room name field.  This
  1425.      field, limited to 20 bytes, is the name of the 'room' in which this
  1426.      message originated.  Some systems may find this field cramped ...
  1427.  
  1428.         Message ID: Field identifier 'S' identifies a message id field.  This
  1429.      field, limited to 20 bytes, contains the message number assigned to this
  1430.      message by the originating system.  NOTE: the format of this data is
  1431.      special.  It is "<high 16 bits><space><low 16 bits>", where the first
  1432.      number is the high 16 bits of the message id in decimal, and the second
  1433.      number is the low 16 bits of the message id in decimal.  For example,
  1434.      if a message had id 4099, it would appear in the 'S' field as "0 4099".
  1435.      This special format is retained for possible backward compatability with
  1436.      CP/M versions of Citadel ... which are still in use and threatening to
  1437.      network, believe it or not!
  1438.  
  1439.         Recipient Override: Field identifier 'w' (different from 'W', above)
  1440.      identifies a Recipient Override field.  'w' fields, of which there may
  1441.      be multiple instances in a message, should appear only in net Mail
  1442.      messages.  When they are present in a message, they OVERRIDE the 'T'o
  1443.      field of the message; that is, the message of which they are part of
  1444.      should be delivered to the person named in each 'w' field, and the person
  1445.      named in the 'T'o field should be ignored insofar as Mail delivery goes.
  1446.      For example, if a message was received during Facility Request 1 which
  1447.      had 3 'w' fields within it, with values of "Jocko", "Moo Cow", and
  1448.      "Jack the Snipper", then the message should be placed in the Mail of
  1449.      those three users, and not to whomever was named in the 'T'o field.
  1450.      'w' fields may be up to 45 bytes long (although only 20 bytes really
  1451.      makes sense).  'w' fields are creatures of the net; there should be no
  1452.      reason to save them in your message base.
  1453.  
  1454.         Target System: Field identifier 't' identifies a Target System.  This
  1455.      field, limited to 20 bytes at the moment, if present will contain the
  1456.      name of the system this piece of Mail is targeted for.  This field is
  1457.      purely a creature of the net and should not need to be saved in message
  1458.      bases, but only in temporary files.  At the moment, Citadel-86 is using
  1459.      this field for internal purposes only, involving OtherNet integration.
  1460.      Other software need not expect this field in Mail messages.
  1461.  
  1462.      VII.1.c Special Fields
  1463.         There are two sorts of special fields.  The first are those reserved
  1464.      for STadel use by David Parsons, and those field identifiers are 'Z',
  1465.      'J', 'I', and '#'.
  1466.  
  1467.         The second type of special field are those identifiers reserved for
  1468.      other C86Net developers.  As the net has grown, become more popular, and
  1469.      endured childish squabbles as poor programming practices and large egos
  1470.      clashed, Mark Metson, developer of the Knotwork software, noted the lack
  1471.  
  1472.  
  1473.  
  1474.  
  1475.                                     -19-
  1476.  
  1477.  
  1478.  
  1479.  
  1480.  
  1481.  
  1482.      of communication and devised a scheme to allow further development of
  1483.      C86Net to proceed while protecting developers from each other.  His
  1484.      modified proposal has been incorporated into C86Net, and it essentially
  1485.      consists of assigning to each 'major' developer a field identifier which
  1486.      they may use for their own work.  All other developers are asked not to
  1487.      use these identifiers for their own purposes.
  1488.  
  1489.         At first it may seem a single identifier is rather inadequate,
  1490.      but actually it need not be.  Since the developer is assigned the field
  1491.      identifier for their exclusive use, they may use it as they like, so
  1492.      long as they remember it must be treated just like any other field
  1493.      identifier in that a NULL byte still constitutes an "End of Field" mark.
  1494.      The first idea which comes to mind is to use the second byte of the field
  1495.      as a "SubField Identifier", for the developer's own purposes.  There may
  1496.      be other ways of using it, as well.  In any case, it should be apparent
  1497.      the exclusive use of a single identifier should be more than
  1498.      adequate for a developer's needs.
  1499.  
  1500.         There is no requirement for one developer to carry or save another
  1501.      developer's fields on the network.
  1502.  
  1503.      VII.1.d Developer's Fields Assignments
  1504.         In keeping with the Citadel tradition of using ASCII for field
  1505.      identifiers, the following assignments have been made to known developers
  1506.      who are involved, or thought to be involved, with the net.  If you are
  1507.      not listed here and wish to be, please contact Hue, Jr. or his successors
  1508.      for an assignment.  (For those confused by flawed documentation distributed
  1509.      by K2NE, K2NE never has been and never will be Hue, Jr.'s successor in
  1510.      this matter.)
  1511.  
  1512.       Identifier        Assigned to             Software
  1513.       ----------        -----------             --------
  1514.          '0'            David Parsons           STadel
  1515.          '1'            Jay Johnson             Amiga Citadel-68k
  1516.          '2'            Hue, Sr.                NeoCitadel
  1517.          '3'            farokh irani            Citadel-286
  1518.          '4'            Gary Meadows/BKB        Asgard-86
  1519.          '5'            Mark Metson             Knotwork
  1520.          '6'            K2NE                    K2NE
  1521.          '7'            elim & Mr. Neutron      <fnord>adel
  1522.          '8'            cmc                     Fortress
  1523.          '9'            b0b                     b0badel
  1524.  
  1525.         Mark Metson's scheme, at least at this point, appears to constitute a
  1526.      very good way to avoid clashes in field identifiers in the future.
  1527.      Therefore, developers are asked not to trample outside their assigned
  1528.      identifiers without coordinating with other C86Net developers.  Citadel-86
  1529.      remains the primary C86Net developer so long as Hue, Jr. continues to
  1530.      program.
  1531.  
  1532.      VII.2 Special Fields becoming Standard Fields
  1533.         The fields detailed above, with the exception of the "developers'
  1534.      fields", constitute a 'standard' collection of fields.  Not all standard
  1535.      fields need be supported by a system, of course.
  1536.  
  1537.  
  1538.  
  1539.  
  1540.  
  1541.  
  1542.                                     -20-
  1543.  
  1544.  
  1545.  
  1546.  
  1547.  
  1548.         A field devised by a developer may eventually become a standard field
  1549.      if it displays a wide enough appeal amongst the developers.  Unilateral
  1550.      grabbing of fields is frowned upon deeply with the advent of developers'
  1551.      fields.  The transformation from a developer's special field to a standard
  1552.      field will no doubt require negotiation, biting of fingernails, etc. etc.
  1553.      Due to the anarchic nature of the net, there can be no "final arbiter" on
  1554.      matters such as these; instead, developers are asked to behave in a
  1555.      responsible and respectful manner.  The actual procedures for adding a
  1556.      developer's field (and thus functionality) to the standard set will be
  1557.      developed when, and if!, needed.
  1558.  
  1559.      VII.3 Other Additions to the Standard Fields
  1560.         Hue, Jr. of Citadel-86 reserves the right to add new fields to the
  1561.      standard set at any time.  Since Mark Metson's scheme should protect
  1562.      all developers from each other, this should not disrupt any other
  1563.      developer who follows the rules.
  1564.  
  1565.      VII.4 Identifier Summary
  1566.  
  1567.       Identifier        Data                                 Max Length
  1568.       ----------        ----                                 ----------
  1569.       'A'          Author of current message.                128
  1570.       'C'          Time message was written.                 20
  1571.       'D'          Date on which message was written.        20
  1572.       'J'          STadel reserved
  1573.       'I'          STadel reserved
  1574.       'M'          Message text, all CRs changed to Line     7499, should not
  1575.                     Feeds.                                         be limited,
  1576.                                                                    though.
  1577.       'N'          Name of system which message was          20
  1578.                     written on.
  1579.       'O'          ID of system which message was written    20
  1580.                     on (i.e., "US 612 470-9635").
  1581.       'P'          OtherNet address                          128
  1582.       'Q'          C-86 reserved (inadvertently forgotten)
  1583.       'R'          Room which message was originally         20
  1584.                     written in.
  1585.       'S'          Message ID on source system, in old       20
  1586.                     CP/M Citadel 8-bit style (i.e., 32 bit
  1587.                     number split into two 16 bitters.  See
  1588.                     below in the example).
  1589.       'T'          Recipient of message (normally for        128
  1590.                     private Mail).
  1591.       'W'          Secondary recipient field.                45
  1592.       'X'          Domain of system originating message      20
  1593.       'Z'          STadel reserved
  1594.       't'          Target System identifier (OtherNet)       20
  1595.       'w'          Recipient override field.
  1596.  
  1597.       'Z'          STadel reserved                           ??
  1598.       'J'             "      "
  1599.       'I'             "      "
  1600.       '#'             "      "
  1601.  
  1602.  
  1603.  
  1604.  
  1605.  
  1606.  
  1607.  
  1608.                                     -21-
  1609.  
  1610.  
  1611.  
  1612.  
  1613.  
  1614.  
  1615.       '0'          David Parsons identifier field           variable
  1616.       '1'          Jay Johnson identifier field
  1617.       '2'          Hue, Sr. identifier field
  1618.       '3'          farokh irani identifier field
  1619.       '4'          Gary Meadows/BKB identifier field
  1620.       '5'          Mark Metson identifier field
  1621.       '6'          K2NE identifier field
  1622.       '7'          elim/Mr. Neutron identifier field
  1623.       '8'          cmc (Fortress) identifier field
  1624.       '9'          b0b (b0badel) identifier field
  1625.       
  1626.         In the above table, the MAX LENGTHS include the NULL byte.
  1627.  
  1628.      VII.5 An example
  1629.         So, a message on Test System (nodeId US 612 470 9635, nodeName 'C86
  1630.      Test System', domain 'MN') in room CitaNews) that looks like this:
  1631.  
  1632.         86Feb01 @ 10:01 from John Flash @ C-86 Test System _ MN
  1633.         This is a test.
  1634.  
  1635.       with a message ID of 5644 might look like this during transmission on
  1636.       the net:
  1637.  
  1638.       D86Feb01<0>C10:01<0>S0 5644<0>NC-86 Test System<0>OUS 612 470
  1639.       9635<0>AJohn Flash<0>RCitaNews<0>XMN<0>MThis is a test.<LF><0>
  1640.  
  1641.         Clear as mud, right?
  1642.  
  1643.      Appendix A.  Examples!
  1644.         The following are examples for selected facilities, in order to
  1645.      illuminate what may be otherwise very bewildering examples.  Not all
  1646.      of the facilities are covered.
  1647.  
  1648.         Many of the facilities will show examples at two levels:  a high level
  1649.      displaying the "file" flow used, and a low level view examining the
  1650.      contents of certain data and control packets.  Throughout the examples,
  1651.      the term "file" means an XMODEM session is completed, starting with block
  1652.      #1 and ending with block N and an EOT.  This may be an actual file being
  1653.      transferred, as will happen with File Requests, or it may mean a series
  1654.      of messages being transmitted, which may or may not be stored as a file,
  1655.      depending on the implementation, or it may refer to control information
  1656.      (such as a Facility Request), which again could be stored as a file on
  1657.      disk, or stored in a temporary RAM buffer.
  1658.  
  1659.         The abbreviation FR stands for Facility Request below.  In all cases
  1660.      below, unless otherwise noted, it assumes all Facility Requests are
  1661.      positively acknowledged.
  1662.  
  1663.      A.1 Call Stabilization
  1664.         The following illustrates a call in which the first attempt at call
  1665.      stabilization fails because the receiver, a 300/1200 system which cannot
  1666.      directly detect the baud of the caller, started looking at 300 baud, while
  1667.      the caller is at 1200.
  1668.  
  1669.  
  1670.  
  1671.  
  1672.  
  1673.  
  1674.  
  1675.                                     -22-
  1676.  
  1677.  
  1678.  
  1679.  
  1680.  
  1681.  
  1682.           CALLER                    RECEIVER
  1683.                <The systems connect!>
  1684.         <7><13>69> -->              receives garbage, switches to 1200 after
  1685.                                     4 seconds
  1686.          Times out at 4
  1687.          seconds
  1688.         <7><13>69> -->              Receives sequence
  1689.          Gets confirmation     <--  <~7><~13><~69>
  1690.           <ACK> -->                 Receives ACK
  1691.  
  1692.              CALL STABILIZATION COMPLETED
  1693.  
  1694.      A.2. ID & Name
  1695.         From a high level, caller identification flow control is very simple.
  1696.  
  1697.         CALLER           RECEIVER
  1698.              == <file> ==>
  1699.  
  1700.         The length of file in this case should never exceed a single XMODEM
  1701.      sector.  The contents should look like this:
  1702.  
  1703.          <C-string: nodeId><C-string: node name><trash>
  1704.  
  1705.         Suppose the node name of a system was Dandelion Wine, and the node id
  1706.      was US 612 732 4419.  Then the ID & Name "file" would contain
  1707.  
  1708.          US 612 732 4419<0>Dandelion Wine<0><irrelevant trash>
  1709.  
  1710.      A.3. Normal Mail
  1711.         At a high level, here is the sequence of file transfers.
  1712.  
  1713.            CALLER           RECEIVER
  1714.          == file: FR == >
  1715.                       <== file: GOOD ==
  1716.          == file: Mail> messages == >
  1717.  
  1718.         At a low level, the file: FR should only have a length of one sector
  1719.      (as should all FRs), containing:
  1720.  
  1721.         <1><0><126 bytes of irrelevant trash>
  1722.  
  1723.         The file: GOOD should contain the following:
  1724.  
  1725.         <1><127 bytes of trash>
  1726.  
  1727.         This is all a GOOD reply should ever contain, so we shall not
  1728.      explain it again.  Refer to Appendix A for an explanation of the
  1729.      appearance of file: Mail> messages.
  1730.  
  1731.  
  1732.  
  1733.  
  1734.  
  1735.  
  1736.  
  1737.  
  1738.  
  1739.  
  1740.  
  1741.                                     -23-
  1742.  
  1743.  
  1744.  
  1745.  
  1746.  
  1747.  
  1748.  
  1749.      A.4. Ambiguous Room File Requests
  1750.         Here is the high level view of this facility:
  1751.  
  1752.            CALLER           RECEIVER
  1753.          == file: FR == >
  1754.                       <== file: GOOD ==
  1755.                       <== file: File #1 header ==
  1756.                       <== file: File #1 ==
  1757.                             ...
  1758.                       <== file: File #n header ==
  1759.                       <== file: File #n ==
  1760.                       <== file: File header with empty string ==
  1761.  
  1762.         For a low level examination, let's assume the Caller asked for
  1763.      *.doc in a room called Whatever>.   The file: FR would then contain
  1764.  
  1765.         <3>Whatever<0>*.doc<0><0><irrelevant trash>
  1766.  
  1767.         Now let's suppose the RECEIVER has decided the files SEX.DOC
  1768.      and GARBAGE.DOC match with *.doc in Whatever>, with sizes of 100,909 and
  1769.      32,555 bytes. File #1 header would contain
  1770.  
  1771.         SEX.DOC<0>789<0><irrelevant trash>
  1772.  
  1773.      while File #1 itself would be the contents of SEX.DOC.  File #2 header
  1774.      would contain
  1775.  
  1776.         GARBAGE.DOC<0>255<0><irrelevant trash>
  1777.  
  1778.      while File #2 would be the contents of GARBAGE.DOC.  File #3 header,
  1779.      since no more files need to be sent, would contain
  1780.  
  1781.         <0><irrelevant trash>
  1782.  
  1783.      and that would constitute the end of this Facility.
  1784.  
  1785.      A.5 Network Room
  1786.         From a high level viewpoint, this Facility looks like this:
  1787.  
  1788.            CALLER           RECEIVER
  1789.          == file: FR == >
  1790.                       <== file: GOOD ==
  1791.          == file: messages == >
  1792.  
  1793.         The contents of the FR for a room named Philosophy would be
  1794.  
  1795.          <5>Philosophy<0><0><irrelevant trash>
  1796.  
  1797.  
  1798.  
  1799.  
  1800.  
  1801.  
  1802.  
  1803.  
  1804.  
  1805.  
  1806.  
  1807.                                     -24-
  1808.  
  1809.  
  1810.  
  1811.  
  1812.  
  1813.  
  1814.      A.6 Check Mail
  1815.         From a high level viewpoint, this Facility looks like this:
  1816.  
  1817.            CALLER           RECEIVER
  1818.          == file: FR ==>
  1819.                       <== file: GOOD ==
  1820.                       <== file: acknowledgements ==
  1821.  
  1822.         The content of the FR would simply be
  1823.  
  1824.            <6><0><irrelevant trash>
  1825.  
  1826.         Let's look at the example that all the Mail messages transferred
  1827.      earlier could be delivered.  The content of file: acknowledgements
  1828.      would then be
  1829.  
  1830.             <0><irrelevant trash>
  1831.  
  1832.      which would result in a single sector being returned to the transmitter.
  1833.      Now let's suppose two Mail messages could not be delivered.  One was
  1834.      addressed to Curly, while the other was addressed to Moe, both from
  1835.      Mikey.  Then the file: acknowledgements would contain
  1836.  
  1837.        <1>Mikey<0>Moe<0>87Oct08 @ 4:04<0><1>Mikey<0>Curly<0>87Oct07
  1838.        @ 23:13<0><0><irrelevant trash>
  1839.  
  1840.      A.7 Send File
  1841.  
  1842.         From a high level viewpoint, this Facility looks like this:
  1843.  
  1844.            CALLER           RECEIVER
  1845.          == file: FR ==>
  1846.                       <== file: GOOD ==
  1847.          == file: file ==>
  1848.  
  1849.         The contents of the FR for a file named GURGLE.NOT, size 13,934 bytes,
  1850.      would be
  1851.  
  1852.           <7>GURGLE.NOT<0>109<0>13934<0><0><irrelevant trash>
  1853.  
  1854.      A.8 Alternate Room Sharing
  1855.         From a high level viewpoint, this Facility looks like this:
  1856.  
  1857.            CALLER           RECEIVER
  1858.          == file: FR ==>
  1859.                       <== file: GOOD ==
  1860.          == file: messages ==>
  1861.                       <== file: messages ==
  1862.  
  1863.         For a room named Horse Trading, the FR would look like
  1864.  
  1865.           <8>Horse Trading<0><0><irrelevant trash>
  1866.  
  1867.         The file: messages would be the messages to be sent from the
  1868.      transmitter to the receiver, first, and then from the receiver to the
  1869.      transmitter.
  1870.  
  1871.  
  1872.  
  1873.                                     -25-
  1874.  
  1875.  
  1876.  
  1877.  
  1878.  
  1879.  
  1880.      Appendix B.  BBS Software compatible with C86Net
  1881.         The following BBS packages are known to be at least minimally
  1882.      compatible with C86Net.  Consult their documentation to find out how
  1883.      many facilities each supports.
  1884.  
  1885.       Name                 Home base           Number           Baud rates
  1886.       ----                 ---------           ------           ----------
  1887.       Citadel-86           C-86 Test System    (612) 470-9635   3/9600 (HST)
  1888.       NeoCitadel           Free Lunch          (612) 431-1107   3/12/24
  1889.       STadel               No longer supported per se.
  1890.       Amiga Citadel-68k    Images              (612) 884-7951   3/12/24
  1891.       Asgard-86            Hotel               (916) 927-7680   3/12/24
  1892.       Novucivitas          Novu                (916) ???-????   ????
  1893.       <fnord>adel          Secret Service      (403) 425-1779   300/1200/2400
  1894.       Fortress             Overmind            (???) ???-????   3/12/24/(PEP)
  1895.       Citadel-86e          Electronic New York (914) 735-9362   300/1200/2400
  1896.       b0badel              Interface           (???) ???-????   300/1200/2400
  1897.       K2NE                 Jersey Devil        (???) ???-????   ????
  1898.  
  1899.      Appendix C. Main C86Net
  1900.         Most of the homebase systems listed in Appendix B participate in
  1901.      what may best be termed the main C86Net, to which all systems are invited
  1902.      to participate in.
  1903.  
  1904.  
  1905.  
  1906.  
  1907.  
  1908.  
  1909.  
  1910.  
  1911.  
  1912.  
  1913.  
  1914.  
  1915.  
  1916.  
  1917.  
  1918.  
  1919.  
  1920.  
  1921.  
  1922.  
  1923.  
  1924.  
  1925.  
  1926.  
  1927.  
  1928.  
  1929.  
  1930.  
  1931.  
  1932.  
  1933.  
  1934.  
  1935.  
  1936.  
  1937.  
  1938.  
  1939.  
  1940.                                    -26-
  1941.  
  1942.  
  1943.